module teapo.storage.attached.indexedDB { export class UpdateStorage implements attached.UpdateStorage { constructor(private _db: IDBDatabase) { update(file: string, property: string, value: string, callback?: (error: Error) => void) { var transaction = this._db.transaction(['files', 'metadata'], 'readwrite');
transaction.onerror = (errorEvent) => callback(wrapErrorEvent(errorEvent, 'update: transaction'));
var filesStore = transaction.objectStore('files'); var getFile = filesStore.get(file);
getFile.onerror = (errorEvent) => callback(wrapErrorEvent(errorEvent, 'update: objectStore(files).get('+file+')')); getFile.onsuccess = (event) => { var file: FileData = getFile.result || { path: file }; var putFile = filesStore.put(file);
putFile.onerror = (errorEvent) => callback(wrapErrorEvent(errorEvent, 'update: objectStore(files).get(' + file + ')-put('+property+','+value+')')); putFile.onsuccess = (event) => { var metadataStore = transaction.objectStore('metadata'); var metadataData = { property: 'editedUTC', value: Date.now() }; var putMetadata = metadataStore.put(metadataData);
putMetadata.onerror = (errorEvent) => callback(wrapErrorEvent(errorEvent, 'update: objectStore(files)/get/put-objectStore(metadata).put(editedUTC,' + metadataData.value+')'));
putMetadata.onsuccess = (event) => callback(null);
remove(file: string, callback?: (error: Error) => void) { callback(new Error('Not implemented.'));